///KoJa
#include<bits/stdc++.h>
using namespace std;
#define task "test"
#define vec vector
#define fi first
#define se second
#define BIT(n) (1LL << (n))
#define MASK(x, i) (((x) >> (i))&1)
#define pb push_back
#define mp make_pair
#define SZ(a) (a).begin(), (a).end()
#define SZZ(a, Begin, End) (a) + (Begin), (a) + (Begin) + (End)
typedef long long ll;
typedef pair<int, int> ii;
template<class T>
bool maximize(T &a, const T &b) { return ((a < b) ? (a = b, 1) : 0);}
template<class T>
bool minimize(T &a, const T &b) { return ((a > b) ? (a = b, 1) : 0);}
struct Points
{
ll x, y;
Points(){}
Points(ll _x, ll _y)
{
x = _x;
y = _y;
}
Points operator - (const Points &other) const { return Points(x - other.x, y - other.y);}
ll operator * (const Points &other) const { return x * other.y - y * other.x;}
ll triangle(const Points &b, const Points &c) const {return (*this - b) * (*this - c);}
};
void fastio()
{
ios_base::sync_with_stdio(NULL);
cin.tie(NULL);
if(fopen(task ".inp", "r"))
{
freopen(task ".inp", "r", stdin);
freopen(task ".out", "w", stdout);
}
}
const int N = int(2e5) + 10;
const int INF = 1e9;
int n, dp1[N], dp2[N], cnt[N];
vec<vec<int>> adj(N);
void init()
{
cin >> n;
for(int i = 1; i <= n - 1; i++)
{
int x, y;
cin >> x >> y;
adj[x].pb(y);
}
}
void dfs(int u, bool isMax)
{
if((int)adj[u].size() == 0)
{
dp1[u] = dp2[u] = cnt[u] = 1;
return;
}
for(int v : adj[u])
{
dfs(v, isMax^1);
cnt[u] += cnt[v];
}
if(isMax) dp1[u] = -INF;
else dp2[u] = INF;
for(int v : adj[u])
{
if(isMax)
{
dp1[u] = max(dp1[u], cnt[u] - cnt[v] + dp1[v]);
dp2[u] += dp2[v];
}
else
{
dp1[u] += (dp1[v] - 1);
dp2[u] = min(dp2[u], dp2[v]);
}
}
if(!isMax) dp1[u]++;
}
void process(int tc = 0)
{
dfs(1, 1);
cout << dp1[1] << " " << dp2[1];
}
int main()
{
fastio();
int tc = 1;
//cin >> tc;
for(int i = 1; i <= tc; i++)
{
init();
process(i);
}
return 0;
}
1351. Count Negative Numbers in a Sorted Matrix | 617. Merge Two Binary Trees |
1450. Number of Students Doing Homework at a Given Time | 700. Search in a Binary Search Tree |
590. N-ary Tree Postorder Traversal | 589. N-ary Tree Preorder Traversal |
1299. Replace Elements with Greatest Element on Right Side | 1768. Merge Strings Alternately |
561. Array Partition I | 1374. Generate a String With Characters That Have Odd Counts |
1822. Sign of the Product of an Array | 1464. Maximum Product of Two Elements in an Array |
1323. Maximum 69 Number | 832. Flipping an Image |
1295. Find Numbers with Even Number of Digits | 1704. Determine if String Halves Are Alike |
1732. Find the Highest Altitude | 709. To Lower Case |
1688. Count of Matches in Tournament | 1684. Count the Number of Consistent Strings |
1588. Sum of All Odd Length Subarrays | 1662. Check If Two String Arrays are Equivalent |
1832. Check if the Sentence Is Pangram | 1678. Goal Parser Interpretation |
1389. Create Target Array in the Given Order | 1313. Decompress Run-Length Encoded List |
1281. Subtract the Product and Sum of Digits of an Integer | 1342. Number of Steps to Reduce a Number to Zero |
1528. Shuffle String | 1365. How Many Numbers Are Smaller Than the Current Number |